home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 10 / The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso / PC_SIGCD / 10 / 9 / DISK1095.ZIP / PAYMNT.PRG < prev    next >
Text File  |  1987-02-14  |  8KB  |  234 lines

  1. *
  2. * PAYMNT
  3. * ACCOUNTS PAYABLE FILE MAINTENANCE
  4. * FILE STRUCTURE MUST ALREADY EXIST
  5. SET HEADING OFF
  6. SET SAFETY OFF
  7. SET STATUS OFF
  8. CLEAR
  9. CLEAR ALL
  10. SET TALK OFF
  11. SET BELL OFF
  12. * DEFINE A STRING OF BLANKS
  13. STORE SPACE(80) TO BLANK
  14. * CLEAR REQUEST AND ACTION CONTROL VARIABLES
  15. STORE " " TO REQUEST
  16. STORE " " TO ACTION
  17. STORE "N" TO DATAIN
  18. STORE 0 TO RECCNT
  19. *
  20. *===============================START MODS: 1================================*
  21. * SET NAME OF FILE                                                           *
  22. STORE "PAYFILE" TO FILENAME
  23. * SETUP COUNT OF INDEXES FOR THE FILE filename
  24. STORE 1 TO IXCOUNT
  25. * SETUP CONSTANTS CONTAINING INDEXES IN SEQUENCE TO USE IN MACRO LATER.
  26. * LIST EACH INDEX FIRST AS A PRIMARY INDEX. VARIABLES NAMED IXA, IXB, IXC, ETC.
  27. STORE "PFACTNO" TO IXA
  28. * DEFINE KEYS FOR INDEX. IF NUMERIC, MUST CONVERT WITH STR(). USE DI+IXA, ETC.
  29. STORE "ACCT_NUM" TO DIIXA
  30. *==================================END MODS==================================*
  31. *
  32. * SAVE NAME OF MACRO WHICH CONTAINS ACTIVE INDEX AS FIRST INDEX
  33. STORE "IXA" TO LIVE_IX
  34. * FIND RECORD COUNT
  35. USE &FILENAME
  36. COUNT TO RECCNT
  37. *  IF DBF FILE IS ZAPPED, IF STATEMENT WILL PREVENT 'RECORD OUT OF RANGE'
  38. *  ERROR FROM OCCURING WHEN <A>dd OPTION OF SUBMENU IS CHOSEN.
  39. IF RECCNT = 1
  40.    RECCNT = RECCNT-1
  41. ENDIF
  42. * IF FILE IS EMPTY, ASSUME INDEXES NOT CREATED AND CREATE THEM
  43.    IF RECCNT = 0
  44.    STORE 1 TO COUNT
  45.    DO WHILE COUNT<=IXCOUNT
  46.       STORE "IX"+CHR(64+COUNT) TO TEMP
  47.       STORE "DI"+TEMP TO TEMP2
  48.       IF IXCOUNT>1
  49.          STORE SUBSTR(&TEMP,1,AT(",",&TEMP)-1) TO TEMP
  50.       ELSE
  51.          STORE &TEMP TO TEMP
  52.       ENDIF
  53.       STORE &TEMP2 TO TEMP2
  54.       INDEX ON &TEMP2 TO &TEMP
  55.       STORE COUNT+1 TO COUNT
  56.    ENDDO
  57.   ENDIF
  58. * ADD INDEXES
  59. SET INDEX TO &IXA
  60. * POSITION AT FIRST RECORD IN LIVE INDEX SEQUENCE FOR INITIAL DISPLAY
  61. GO TOP
  62. *
  63. * MAIN UPDATE LOOP. TERMINATED BY 'M' AS REQUEST
  64. DO WHILE REQUEST<>"M"
  65. *
  66. *===============================START MODS: 2================================*
  67. * DISPLAY SCREEN MASK: HEADING INFORMATION PLUS LABELS FOR EACH FIELD        *
  68.    @ 1,22 SAY "SMITH'S BIKEWORKS INFORMATION SYSTEM"
  69.    @ 3,20 SAY ">> Accounts Payable File Maintenance <<"
  70.    @ 5,17 SAY "Today's Date:"
  71.    ?? DATE()
  72. * SETUP VARIABLE PART OF MASK
  73.    CLEAR GETS
  74.    @ 7,1  SAY "Account Number " GET ACCT_NUM
  75.    @ 7,40  SAY "Date Recorded " GET DATE_RECD PICTURE "99/99/99"
  76.    @  9,1  SAY "Payee      " GET PAYEE
  77.    @ 11,1  SAY "Date Due   " GET DATE_DUE PICTURE "99/99/99"
  78.    @ 11,40 SAY "Amount Due " GET AMOUNT PICTURE "99999.99"
  79.    @ 13,1 SAY  "Date Paid  " GET DATE_PAID PICTURE "99/99/99"
  80.    @ 13,40 SAY "Check Number " GET CHECK_NUM
  81.    @ 15,1 SAY "Ref " GET REFERENCE
  82. * DATE OF LAST UPDATE SHOULD BE ONE OF THE FIELDS (LAST_UPDT)
  83.    @ 18,1 SAY "Last Updated : "
  84.    ?? LAST_UPDT
  85. *==================================END MODS==================================*
  86. *
  87. * DISPLAY VARIABLE DATA IN SCREEN HEADING
  88.    IF DELETE()
  89.       @ 5,1 SAY "* DELETED *"
  90.    ELSE
  91.       @ 5,1 SAY "           "
  92.    ENDIF
  93. * IDENTIFY RECORD
  94.    @ 5,62 SAY RECCNT
  95.    @ 5,50 SAY RECNO()
  96.    @ 5,43 SAY "Record"
  97.    @ 5,61 SAY "of"
  98. * IF DATAIN FLAG SET, ACTIVATE THE GETS
  99.    IF DATAIN="Y"
  100.       @ 19,72 GET ACTION
  101.       READ
  102. * DATE STAMP RECORD
  103.       REPLACE LAST_UPDT WITH DATE()
  104.       IF REQUEST="E".OR.ACTION<>"C"
  105.          STORE "N" TO DATAIN
  106.          STORE " " TO REQUEST
  107.          STORE " " TO ACTION
  108.       ENDIF 2
  109.    ELSE
  110.       CLEAR GETS
  111.    ENDIF 1
  112. *
  113. * DISPLAY CONTROL SUBMENU, CURRENT ACTIVE INDEX
  114.    @ 19,0 SAY BLANK
  115.    @ 20,0 SAY "----------------------------------------"
  116.    @ 20,40 SAY "----------------------------------------"
  117.    @ 21,0 CLEAR
  118.    @ 21,2 SAY ;
  119. "<F>ind Record  <A>dd Record   <D>elete/Recall  <E>dit Record   Current Active"
  120.    @ 22,2 SAY ;
  121. "<P>rev Record  <N>ext Record  <M>enu (return)  <K>ey Select    Key:          "
  122. * IF INDEX SET NAMED IN LIVE_IX HAS MULTIPLE ENTRIES, EXTRACT FIRST
  123.    IF (","$&LIVE_IX)
  124.       STORE SUBSTR(&LIVE_IX,1,AT(",",&LIVE_IX)-1) TO TEMP
  125.       @ 22,70 SAY TEMP
  126.    ELSE
  127.       @ 22,70 SAY &LIVE_IX
  128.    ENDIF
  129. * GET REQUEST AND FORCE TO UPPER CASE UNLESS ALREADY IN 'A' FOR ADD RECORDS
  130.    IF REQUEST<>"A"
  131.       STORE " " TO REQUEST
  132.       STORE " " TO ACTION
  133.       @ 23,10 SAY "          *** NEXT ACTION TO PERFORM " GET REQUEST
  134.       READ
  135.       STORE UPPER(REQUEST) TO REQUEST
  136.    ENDIF
  137. * CLEAR ADD RECORD COMMAND LINE, SUBMENU AREA
  138.    @ 21,0 CLEAR
  139.    DO CASE
  140. * ADD NEW CASE OR EDIT DISPLAYED CASE
  141.       CASE REQUEST="A".OR.REQUEST="E"
  142. * IN ADD MODE, APPEND A BLANK RECORD FOR THE DATA AND POSITION TO THAT RECORD
  143.          IF REQUEST="A"
  144.             @ 19,6 SAY "*** PRESS 'C' TO CONTINUE ADDING NEW RECS, ANYTHING ;
  145. ELSE TO QUIT"
  146.             APPEND BLANK
  147.             STORE RECCNT+1 TO RECCNT
  148.             GO RECCNT
  149. **PRESET DATE RECORDED TO TODAY'S DATE
  150.             REPLACE DATE_RECD WITH DATE()
  151.          ELSE
  152.             @ 19,6 SAY "******** PRESS ANY KEY TO FINISH EDIT AND RETURN TO ;
  153. SUBMENU     "
  154.          ENDIF
  155.          @ 21,10 SAY "Enter data at cursor position. Move among fields with"
  156.          @ 22,10 SAY "cursor control keys. Press ENTER to move to next field."
  157.          @ 23,10 SAY "Press ENTER alone to leave field unchanged."
  158. * SET FLAG TO CAUSE NEW DATA TO BE READ
  159.          STORE "Y" TO DATAIN
  160. * TOGGLE DELETE FLAG. * FUNCTION CHECKS IF RECORD NOW FLAGGED AS DELETED
  161.       CASE REQUEST="D"
  162.          IF DELETE()
  163.             RECALL
  164.          ELSE
  165.             DELETE
  166.          ENDIF
  167. * PREVIOUS RECORD IN ACTIVE INDEX SEQUENCE
  168.       CASE REQUEST="P"
  169.          SKIP -1
  170. * NEXT 3 LINES SECURE THE BACKWARD LOOP
  171.          IF BOF()
  172.             GO BOTTOM
  173.          ENDIF
  174. * NEXT RECORD IN ACTIVE INDEX SEQUENCE
  175.       CASE REQUEST="N"
  176.          SKIP +1
  177. * NEXT 3 LINES SECURE THE FORWARD LOOP
  178.          IF EOF()
  179.             GO TOP
  180.          ENDIF
  181. * GET SEARCH VALUE FOR INDEXED SEARCH
  182.       CASE REQUEST="F"
  183. * USE MACRO DEFINING INDEX ENTRIES FROM DATA FIELDS
  184.          STORE "DI"+LIVE_IX TO IXDEF
  185.          STORE &IXDEF TO SV
  186.          STORE &SV TO SV
  187.          @ 21,1 SAY ;
  188.          "ENTER SEARCH VALUE. VALUE SHOWN IS FROM THE DISPLAYED RECORD. PRESS"
  189.          @ 22,1 SAY "CTRL-Y TO CLEAR " GET SV
  190.          READ
  191. * IF RECORD IS NOT FOUND DISPLAY STAYS AT CURRENT RECORD
  192. * NEXT LINE TO KEEP TRACK OF CURRENT RECNO() FOR TEST BELOW
  193.          STORE RECNO() TO NOW
  194.          SEEK SV
  195. * NEXT 3 LINES KEEP PRESENT RECORD DISPLAYED IF NO FIND
  196.          IF EOF()
  197.             GOTO NOW
  198.          ENDIF
  199. * CHANGE INDEX
  200.       CASE REQUEST="K"
  201.          STORE RECNO() TO RECNOW
  202.          STORE " " TO IXCHOICE
  203. * SETUP MENU OF INDEX NAMES, PROVIDE IF CLAUSE FOR EACH INDEX                *
  204.          @ 21,9 SAY " "
  205.          STORE 1 TO COUNT
  206.          DO WHILE COUNT<=IXCOUNT
  207.             STORE "IX"+CHR(64+COUNT) TO TEMP
  208.             IF IXCOUNT>1
  209.                ?? CHR(64+COUNT)+". "+SUBSTR(&TEMP,1,AT(",",&TEMP)-1)+" "
  210.             ELSE
  211.                ?? CHR(64+COUNT)+". "+&TEMP
  212.             ENDIF
  213.             STORE COUNT+1 TO COUNT
  214.          ENDDO
  215.          @ 22,10 SAY "Press letter of desired key " GET IXCHOICE
  216.          READ
  217.          STORE UPPER(IXCHOICE) TO IXCHOICE
  218.          IF IXCHOICE>="A".AND.IXCHOICE<=CHR(64+IXCOUNT)
  219.             STORE "IX"+IXCHOICE TO LIVE_IX
  220.             STORE &LIVE_IX TO TEMP
  221.             SET INDEX TO &TEMP
  222.          ENDIF
  223. * GOTO THIS RECORD TO ACTIVATE INDEX
  224.          IF RECNOW>0
  225.             GO RECNOW
  226.          ELSE
  227.             GO BOTTOM
  228.          ENDIF
  229.    ENDCASE
  230. ENDDO
  231. * FALL OUT OF DO WHEN 'M' IS REQUEST, RETURN TO SUBSYSTEM'S MENU
  232. CLEAR
  233. RETURN
  234.